.fp 5 CW
.de Af
.ds ;G \\*(;G\\f\\$1\\$3\\f\\$2
.if !\\$4 .Af \\$2 \\$1 "\\$4" "\\$5" "\\$6" "\\$7" "\\$8" "\\$9"
..
.de aF
.ie \\$3 .ft \\$1
.el \{\
.ds ;G \&
.nr ;G \\n(.f
.Af "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6" "\\$7" "\\$8" "\\$9"
\\*(;G
.ft \\n(;G \}
..
.de L
.aF 5 \\n(.f "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6" "\\$7"
..
.de LR
.aF 5 1 "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6" "\\$7"
..
.de RL
.aF 1 5 "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6" "\\$7"
..
.de EX		\" start example
.ta 1i 2i 3i 4i 5i 6i
.PP
.PD 0
.ft 5
.nf
..
.de EE		\" end example
.fi
.ft
.PD
.PP
..
.de Tp
.fl
.ne 3
.TP
..
.de Ss
.fl
.ne 3
.SS "\\$1"
..
.ta 1.0i 2.0i 3.0i 4.0i 5.0i
.TH ASTSA 3
.SH NAME
astsa \- standalone libast support
.SH SYNOPSIS
.EX
#include <ast.h>
#include <ccode.h>
#include <error.h>
#include <option.h>
#include <stk.h>
.EE
.SH DESCRIPTION
.B astsa
is a standalone subset of
.BR ast (3)
that requires only
.BR cdt (3)
and
.BR sfio (3).
.PP
.B <ast.h>
includes
.BR <ast_common.h> ,
.B <stdarg.h>
or
.BR <varargs.h> ,
.BR <sfio.h> ,
.BR <limits.h> ,
and
.B <limits.h>
and
.B <unistd.h>
if supported by the local system.
.PP
The macros and functions provided by
.B <ast.h>
are described below.
The other headers are described in
.BR ccode (3),
.BR error (3),
.BR optget (3),
and
.BR stk (3).
.SH MACROS
.Ss "size_t elementsof(\fIx\fP)"
Evaluates to the number of elements in the array variable
.IR x .
.Ss "\fItype\fP* newof(void* old, \fItype\fP, size_t \fIelements\fP, size_t \fIextra\fP)"
Equivalent to (\fItype\fP*)realloc((char*)\fIold\fP,sizeof(\fItype\fP)*\fIelements\fP+\fIextra\fP)
if \fIold\fP!=0 and
(\fItype\fP*)calloc(1,sizeof(\fItype\fP)*\fIelements\fP+\fIextra\fP)
otherwise.
.Ss "\fItype\fP* oldof(void* old, \fItype\fP, size_t \fIelements\fP, size_t \fIextra\fP)"
Equivalent to (\fItype\fP*)realloc((char*)\fIold\fP,sizeof(\fItype\fP)*\fIelements\fP+\fIextra\fP)
if \fIold\fP!=0 and
(\fItype\fP*)malloc(1,sizeof(\fItype\fP)*\fIelements\fP+\fIextra\fP)
otherwise.
.Ss "size_t roundof(\fIx\fP,\fIy\fP)"
Evaluates to \fIx\fP rounded up to the next power of 2 boundary \fIy\fP.
.Ss "int ssizeof(\fIx\fP)"
Equivalent to (int)sizeof(\fIx\fP).
.Ss "int streq(\fIa\fP,\fIb\fP)"
Equivalent to (*(\fIa\fP)==*(\fIb\fP)&&strcmp(\fIa\fP,\fIb\fP)==0).
.Ss "int strneq(\fIa\fP,\fIb\fP,\fIn\fP)"
Equivalent to (*(\fIa\fP)==*(\fIb\fP)&&strncmp(\fIa\fP,\fIb\fP,\fIn\fP)==0).
.SH FUNCTIONS
.Ss "void astwinsize(int \fIfd\fP, int* \fIplines\fP, int* \fIpcolumns\fP)"
If \fIplines\fP!=0 then *\fIplines\fP is set to the number of lines on the
tty device corresponding to \fIfd\fP.
If \fIpcolumns\fP!=0 then *\fIpcolumns\fP is set to the number of columns
on the tty device corresponding to \fIfd\fP.
The default if \fIfd\fP is not a terminal device, or if \fIfd\fP queries fail,
is 24 lines and 80 columns.
.Ss "char* fmterror(int \fIerrno\fP)"
Returns the error message text corresponding to the
.BR errno (3)
\fIerrno\fP.
.Ss "char* strerror(int \fIerrno\fP)"
Equivalent to fmterror(\fIerrno\fP).
.Ss "int strgrpmatch(const char* \fIstring\fP, const char* \fIpattern\fP, int* \fIsub\fP, int \fInsub\fP, int \fIflags\fP)"
Matches the null terminated \fIstring\fP against the null terminated
.BR ksh (1)
augmented \fIpattern\fP.
If \fIsub\fP!=0 then \fIsub\fP[2*\fIi\fP] is set to the start offset and \fIsub\fP[2*\fIi\fP+1] is set
to the end offset of the \fIi\fP-th parenthesized subexpression.
\fInsub\fP is 1/2 the number of elements in \fIsub\fP.
\fIflags\fP controls the matching:
.Tp
\f5STR_MAXIMAL\fP:
Maximal match.
The default is minimal (first) match.
.Tp
\f5STR_LEFT\fP:
Implicit left anchor.
.Tp
\f5STR_RIGHT\fP:
Implicit right anchor.
.Tp
\f5STR_ICASE\fP:
Ignore case.
.Tp
\f5STR_GROUP\fP:
(|&) inside [@|*|+{n,m}](...) only.
.Ss "int strmatch(const char* \fIstring\fP, const char* \fIpattern\fP, int* \fIsub\fP, int \fInsub\fP, int \fIflags\fP)"
Equivalent to strgrpmatch(\fIstring\fP,\fIpattern\fP,0,0,STR_MAXIMAL|STR_LEFT|STR_RIGHT).
.SH "SEE ALSO"
.BR ast (3),
.BR ccode (3),
.BR cdt (3),
.BR error (3),
.BR malloc (3),
.BR option (3),
.BR sfio (3),
.BR stk (3)
